package com.platform.usercenter.service;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.platform.common.core.domain.base.BaseRequest;
import com.platform.usercenter.domain.SysOrganization;
import com.platform.usercenter.domain.SysOrganizationRelation;
import com.platform.usercenter.domain.dto.SysOrganizationDTO;
import com.platform.usercenter.domain.vo.SysOrganizationInfo;
import com.platform.usercenter.domain.vo.SysOrganizationVO;

/**
 * 组织Service接口
 *
 * @author platform
 * @date 2024-10-24
 */
public interface ISysOrganizationService
{
    /**
     * 查询组织
     *
     * @param orgId 组织主键
     * @return 组织
     */
    public SysOrganization selectSysOrganizationByOrgId(Long orgId);

    /**
     * 查询组织详情
     *
     * @param orgId 组织主键
     * @return 组织
     */
    public SysOrganizationInfo selectSysOrganizationInfo(Long orgId);

    /**
     *
     * 获取当前登录用户登录组织的上下游组织关系
     * @param orgId
     * @return
     */
    public List< SysOrganizationRelation > selectUpAndDownOrgs( Long orgId);
    public List< SysOrganizationRelation > selectUpAndDownOrgsByParentOrgIds( Set<Long> orgIds);

    /**
     * 查询组织列表
     *
     * @param sysOrganization 组织
     * @return 组织集合
     */
    public List<SysOrganization> selectSysOrganizationList(SysOrganization sysOrganization);

    /**
     * 获取树结构
     * @param sysOrganization
     * @return
     */
    public List<SysOrganizationVO> listTree(SysOrganization sysOrganization);
    public List<SysOrganizationVO> listOrgTree(SysOrganization sysOrganization);
    public SysOrganizationVO listTreeByUserOrg(SysOrganization sysOrganization,Long orgId);

    public List<SysOrganizationVO> listTreeByUserId(Long userId);

    /**
     * 新增组织
     *
     * @param sysOrganization 组织
     * @return 结果
     */
    public int insertSysOrganization(SysOrganization sysOrganization);
    /**
     * 新增组织
     *
     * @param dto 组织
     * @return 结果
     */
    public int insertSysOrganizationInfo(SysOrganizationDTO dto);

    /**
     * 修改组织
     *
     * @param sysOrganization 组织
     * @return 结果
     */
    public int updateSysOrganization(SysOrganization sysOrganization);
    /**
     * 修改组织
     *
     * @param sysOrganization 组织
     * @return 结果
     */
    public int updateSysOrganizationInfo(SysOrganizationDTO sysOrganization);

    /**
     * 批量删除组织
     *
     * @param orgIds 需要删除的组织主键集合
     * @return 结果
     */
    public int deleteSysOrganizationByOrgIds(Long[] orgIds);

    /**
     * 删除组织信息
     *
     * @param orgId 组织主键
     * @return 结果
     */
    public int deleteSysOrganizationByOrgId(Long orgId);

    /**
     * 查询组织关系列表
     *
     * @return 组织集合
     */
    public List<SysOrganizationVO> selectSysOrganizationTree();
    public List<SysOrganizationVO> userAllOrgTree();


    List<SysOrganization> selectSysOrganizationListByUserId(Long userId);

    HashSet< String> getAirportListByOrgAndUser( BaseRequest res ) throws JsonProcessingException;
}
